package com.nanxhs.proxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 动态代理类
 * <br/>
 * @author: haibin.tang
 * @date: 2021/2/5
 */
public class JdkDynamicProxy implements InvocationHandler {
    /**
     * 真实对象
     */
    private final Object target;

    public JdkDynamicProxy(Object target) {
        this.target = target;
    }

    /**
     * 最终生成的目标代理类会调用该方法
     * @param proxy  调用该方法的代理实例
     * @param method 要调用的目标方法
     * @param args 调用方法所需的参数
     * @return
     * @throws Throwable
     */
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("调用开始" + target.getClass().getName() + "#" + method.getName());
        return method.invoke(target, args);
    }
}
